package com.xtm.exercise.base.A08Collection.A01list;

import com.google.common.collect.Lists;
import org.apache.commons.collections4.ListUtils;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 类描述：list的分批处理实现几种方式
 *
 * @author lei
 * @version 1.0
 * @date 2023/3/14 9:07
 */
public class BatchProcessList {

    /**
     * 使用apache 的 collection 工具提供方法实现lsit分批
     * 此方式需要在项目中引入apache 的pom包依赖：
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-collections4</artifactId>
             <version>4.4</version>
         </dependency>
     */
    @Test
    public void test01(){
        // 创建模拟list
        List<Integer> intList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        // 按5个每组进行分割
        List<List<Integer>> subs = ListUtils.partition(intList, 5);
        // 对分批list的具体业务处理 process(list) - 打印代替
        System.out.println(subs);
        // 使用apache common collection 实现分批
        //[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
    }

    /**
     * 使用google guava 工具提供方法对List进行分割
     * 此方式需要在项目中引入guava的pom包依赖：
         <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
             <version>18.0</version>
         </dependency>
     */
    @Test
    public void test02(){
        // 创建模拟list
        List<Integer> tempList = new ArrayList<>();
        for (int i = 1; i <= 20; i++) {
            tempList.add(i);
        }
        //按每5个一组分割
        List<List<Integer>> parts = Lists.partition(tempList, 5);
        // 对分批list的具体业务处理 process(list) - 打印代替
        System.out.println(parts);
        //使用google guava分割
        //[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20]]
    }
}
